<?php

// +----------------------------------------------------------------------
// |  会员模型
// +----------------------------------------------------------------------

namespace User\Model;

use Common\Model\Model;

class UserModel extends Model {

    //array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间])
    protected $_validate = array(
        array('uname', 'require', '用户名不能为空！'),
        array('upassword', 'require', '密码不能为空！', 0, 'regex', 1),
        //callback
        array('uname', 'checkName', '用户名已经存在或不合法！', 0, 'callback', 1),
    );
    //array(填充字段,填充内容,[填充条件,附加规则])
    protected $_auto = array(
        array('create_time', 'time', 1, 'function'),
        array('uip', 'get_client_ip', 1, 'function'),
        array('status',true,1),
    );

    /**
     * 根据错误代码返回错误提示
     * @param type $errorCodes 错误代码
     * @return type
     */
    public function getErrorMesg($errorCodes) {
        switch ($errorCodes) {
            case -1:
                $error = '用户名不合法';
                break;
            case -2:
                $error = '包含不允许注册的词语';
                break;
            case -3:
                $error = '用户名已经存在';
                break;
            case -4:
                $error = 'Email 格式有误';
                break;
            case -5:
                $error = 'Email 不允许注册';
                break;
            case -6:
                $error = '该 Email 已经被注册';
                break;
            default:
                $error = '操作出现错误';
                break;
        }

        return $error;
    }

    //检查用户名
    public function checkName($name) {
        if (service("Passport")->userCheckUsername($name)) {
            return true;
        }
        return false;
    }

    //检查邮箱
    public function checkEmail($email) {
        if (service("Passport")->userCheckeMail($email)) {
            return true;
        }
        return false;
    }



    /**
     * 对明文密码，进行加密，返回加密后的密码
     * @param $identifier 为数字时，表示uid，其他为用户名
     * @param type $pass 明文密码，不能为空
     * @return type 返回加密后的密码
     */
    public function encryption($identifier, $pass, $authkey = "") {
        $v = array();
        if (is_numeric($identifier)) {
            $v["id"] = $identifier;
        } else {
            $v["uname"] = $identifier;
        }
        $pass = md5($pass . md5($authkey));
        return $pass;
    }

    /**
     * 根据标识修改对应用户密码
     * @param type $identifier
     * @param type $password
     * @return type 
     */
    public function ChangePassword($identifier, $password) {
        if (empty($identifier) || empty($password)) {
            return false;
        }
        $term = array();
        if (is_numeric($identifier)) {
            $term['userid'] = $identifier;
        } else {
            $term['uname'] = $identifier;
        }
        $authkey = $this->where($term)->getField('authkey');

        $data['upassword'] = $this->encryption($identifier, $password, $authkey);

        $up = $this->where($term)->save($data);
        if ($up) {
            return true;
        }
        return false;
    }


    /**
     * 取得本应用中的用户资料
     * @param type $identifier
     * @param type $field
     * @return boolean
     */
    public function getUserInfo($identifier, $field = '*') {
        if (empty($identifier)) {
            return false;
        }
        $where = array();
        if (is_numeric($identifier) && gettype($identifier) == "integer") {
            $where['userid'] = $identifier;
        } else {
            $where['uname'] = $identifier;
        }
        $userInfo = $this->where($where)->field($field)->find();
        if (empty($userInfo)) {
            return false;
        }
        return $userInfo;
    }

    /**
     * 取得用户配置
     * @param type $userid 用户UID
     * @return boolean
     */
    public function getUserConfig($userid) {
        if (empty($userid) || $userid < 1) {
            $this->error = '请指定用户ID！';
            return false;
        }
        //检查缓存是否存在
        $userConfig = S('user_config_' . $userid);
        if (!empty($userConfig)) {
            return $userConfig;
        }
        //取得用户信息
        $userInfo = service("Passport")->getLocalUser((int) $userid);
        if (empty($userInfo)) {
            $this->error = '该用户不存在！';
            return false;
        }

        //进行缓存
        S('user_config_' . $userid, $userInfo, 3600);
        return $userInfo;
    }




}
